import { t } from 'i18next'
import dayjs, { WEEKDAY } from '@/plugins/dayjs'
export interface CardNavProps {
	/**是否展示 */
	is_show: boolean
	/**更改show */
	is_show_action: () => void
	/**展示的文章标题 */
	title: string
	/**是否展示更多 默认为false（预约会议展示  并且预约会议的数量需要大于10) */
	is_more?: boolean
}
export interface MeetingCardProps {
	className?: string
	entity: MeetingEntity
	orderArr: [number, number]
}
export type SelectType = Array<{
	label: string
	value: string
}>
export interface GetTitleEntity {
	/**会议的实体 */
	_meeting: MeetingEntity
	/**是否展示分享 */
	is_show_share?: boolean
	/**是否展示VCS */
	is_show_vcs?: boolean
	/**是否展示编辑*/
	is_show_edit?: boolean
}
export interface SearchParamsEntity {
	state: number
	count: number
	start: number
	start_time: string
	end_time: string
	name: string
	order: number
}
/**参会人*/
export interface MemberEntity {
	account: string
	account_type: number
	is_participated?: number
	name: string
	participated_type?: number
	portrait?: string
}
/**审批人*/
export interface AuditMemberEntity {
	/**审批时间*/
	audit_at: string
	/**审批人的moid */
	audit_by: string
	/**审批人名称*/
	audit_name: string
	/**审批拒绝原因描述类型*/
	desc_type: number
	/**审批拒绝原因 */
	desc: string
	/**会议moid */
	meeting_moid: string
}
/**例会详情*/
export interface meetingFormularEntity {
	end_date: string
	frequency: 0 | 1
	start_date: string
	week_days: string
	frequencyLabel: string
	repeat_type: 0 | 1
}
export interface _MeetingEntity {
	/**会议moid*/
	meeting_id: string
	/**会议的e164号 */
	conf_id: string
	/**会议名称 */
	name: string
	start_time: string
	state: number
	/**是否是视频会议*/
	video: 0 | 1
	/**组织者信息*/
	creator: {
		account: string
		account_type: number
		name: string
		mobile: string
		telephone: string
	}
	/**当前永辉的参会状态*/
	current_user_attendee: {
		account: string
		account_type: number
		name: string
		/**当前用户是否参会（0-不参加 1-参加） */
		is_participated: 0 | 1
		/**当前用户参会情况（1-去会议室参加 2-通过个人客户端参加 3-电话参会）*/
		participated_type: 1 | 2 | 3
		portrait: ''
	}
	/**参会人数*/
	attending_person_num: number
	/**会议室 */
	meeting_rooms: Array<any>
	/**是否是参与者 */
	is_attendee: 0 | 1
	/**是否存在冲突会议 */
	is_conflict: 0 | 1
	/**是否存在会场管理按钮 */
	is_manager_meeting: 0 | 1
	cascade_meeting: 0 | 1
	/**是否存在结束会议按钮*/
	is_stop: 0 | 1
	/**是否马上立即召开 */
	is_now_start: 0 | 1
	is_set_place: 1
	/**是否可编辑 */
	is_edit: 0 | 1
	/**是否展示取消会议按钮 */
	is_cancel: 0 | 1
	/**文件数量 */
	file_num: number
	rooms: []
	/**参会人信息 */
	members: Array<MemberEntity>
	/**允许RTC*/
	enable_rtc: number
	/**会议间隔 */
	duration: number
	/**超大方会议*/
	super_mt_num: 0 | 1
	/**加密方式 */
	encrypted_type: 0 | 2 | 3 | 4
	/**量子加密*/
	quantum_encryption: 0 | 1
	max_join_mt: 192
	/**会议类型 */
	meeting_type: number
	last_modify_time: string
	/**密级 */
	security_level: 0
	/**会议种类 0-普通会议 1-调度会议 */
	conf_category: 0 | 1
	/**审批人 */
	audit: Partial<AuditMemberEntity>
	/**审批人列表(审批中使用)*/
	audit_person_list: Array<any>
	/**跨会议表示 此处始终为false */
	crossPlatform: false
	/**用户域 */
	user_domain_name: string
	/**例会的meetingMoid*/
	regular_meeting_moid?: string
	meeting_formular: Partial<meetingFormularEntity>
}
export interface ValidLinkProps {
	last_modify_time: string
	is_regular_meeting: number
	meeting_moid: string
}
/**个人参会信息 */
export interface personAttendingInfoEntity {
	meetingMoid: string
	/**是否是视频会议*/
	isVideoMeeting: number
	/**是否参会 */
	isParticipated: number
	/**参会方式 */
	participatedType: number | string
	/**参会号码 */
	participatedNO: string
	reasonId: string | number
	reasonDesc?: string
}
export class MeetingEntity {
	/**会议moid*/
	meeting_id: string
	/**会议的e164号 */
	conf_id: string
	/**会议名称 */
	name: string
	start_time: string
	/**会议状态 1-已预订 2-已开始 3-已结束 4-已删除 5-中间临时状态 6-待审批 7-审批不通过 8,9-异常情况*/
	state: number
	/**是否是视频会议*/
	video: 0 | 1
	/**组织者信息*/
	creator: {
		account: string
		account_type: number
		/**组织者姓名 */
		name: string
		/**电话 */
		mobile: string
		/**组织者号码*/
		telephone: string
	}
	/**当前参会用户*/
	current_user_attendee: {
		account?: string
		account_type?: number
		name?: string
		/**当前用户是否参会（0-不参加 1-参加） */
		is_participated: 0 | 1
		/**当前用户参会情况（1-去会议室参加 2-通过个人客户端参加 3-电话参会）*/
		participated_type: 1 | 2 | 3
		portrait?: ''
	}
	/**参会人数*/
	attending_person_num: number
	/**会议室 */
	meeting_rooms: Array<any>
	/**是否是参与者 */
	is_attendee: 0 | 1
	/**是否存在冲突会议 */
	is_conflict: 0 | 1
	/**是否存在会场管理按钮 */
	is_manager_meeting: 0 | 1
	cascade_meeting: 0 | 1
	/**是否存在结束会议按钮*/
	is_stop: 0 | 1
	/**是否马上立即召开 */
	is_now_start: 0 | 1
	is_set_place: 1
	/**是否展示编辑按钮 */
	is_edit: 0 | 1
	/**是否展示取消按钮 */
	is_cancel: 0 | 1
	/**文件数量*/
	file_num: number
	rooms: []
	/**参会人信息 */
	members: Array<MemberEntity>
	/**允许RTC*/
	enable_rtc: number
	/**会议间隔 */
	duration: number
	/**超大方会议*/
	super_mt_num: 0 | 1
	/**加密方式 */
	encrypted_type: 0 | 2 | 3 | 4
	/**量子加密*/
	quantum_encryption: 0 | 1
	max_join_mt: 192
	/**会议类型 */
	meeting_type: number
	/**最后修改日期*/
	last_modify_time: string
	/**密级 */
	security_level: number
	/**会议种类 0-普通会议 1-调度会议 */
	conf_category: 0 | 1
	/**审批人 */
	audit: Partial<AuditMemberEntity>
	/**审批人列表(审批中使用)*/
	audit_person_list: Array<any>
	/**跨会议表示 此处始终为false */
	crossPlatform: false
	/**用户域 */
	user_domain_name: string
	/**例会的meetingMoid*/
	regular_meeting_moid?: string
	meeting_formular: Partial<meetingFormularEntity>
	isRegularMeeting: number
	constructor(param: _MeetingEntity) {
		this.members = param.members
			? param.members.map((person) => ({
					account: person.account ?? '',
					name: person.name ?? '',
					portrait: person.portrait ?? '',
					account_type: person.account_type,
			  }))
			: []
		this.attending_person_num = param.attending_person_num ?? 0
		this.meeting_id = param.meeting_id
		this.enable_rtc = param.enable_rtc
		this.name = param.name ?? ''
		this.meeting_type = param.meeting_type ?? 2
		this.crossPlatform = false
		this.last_modify_time = param.last_modify_time ?? ''
		this.cascade_meeting = param.cascade_meeting ?? 0
		this.current_user_attendee = {
			is_participated: param.current_user_attendee?.is_participated ?? 0,
			participated_type: param.current_user_attendee?.participated_type ?? 1,
		}
		this.conf_id = param.conf_id ?? ''
		this.encrypted_type = param.encrypted_type ?? 0
		this.file_num = param.file_num ?? 0
		this.is_attendee = param.is_attendee ?? 1
		this.is_cancel = param.is_cancel
		this.is_conflict = param.is_conflict ?? 0
		this.is_edit = param.is_edit ?? true
		this.is_manager_meeting = param.is_manager_meeting ?? false
		this.is_now_start = param.is_now_start ?? false
		this.regular_meeting_moid = param.regular_meeting_moid ?? ''
		this.is_set_place = param.is_set_place ?? false
		this.creator =
			{
				account: param.creator.account,
				account_type: param.creator.account_type,
				/**组织者姓名 */
				name: param.creator.name,
				/**电话 */
				mobile: param.creator?.telephone ?? '',
				telephone: param.creator?.mobile ?? '',
			} ?? {}
		this.quantum_encryption = param.quantum_encryption ?? 0
		this.super_mt_num = param.super_mt_num ?? 0
		this.user_domain_name = param.user_domain_name ?? ''
		this.audit = param.audit
			? {
					audit_at: dayjs(param.audit.audit_at).format('YYYY-MM-DD HH:mm:ss'),
					audit_name: param.audit.audit_name,
					desc_type: param.audit.desc_type,
					meeting_moid: param.audit.meeting_moid,
					desc: param.audit.desc,
					audit_by: param.audit.audit_at,
			  }
			: {}
		this.audit_person_list = param.audit_person_list ?? []
		this.start_time = param.start_time
		this.is_stop = param.is_stop ?? false //是否结束
		this.video = param.video ?? 0
		this.conf_category = param.conf_category ?? 0
		this.state = param.state ?? 2
		this.meeting_rooms = param.meeting_rooms ?? [] //涉及会议室
		this.rooms = param.rooms ?? [] //涉及会议室
		this.max_join_mt = param.max_join_mt
		this.security_level = param.security_level
		this.duration = param.duration ?? 0 //会议时长（分钟）
		/**是否例会(审批列表中显示例会样式，其余以普通会议显示) */
		this.isRegularMeeting = param.regular_meeting_moid && param.meeting_formular ? 1 : 0
		this.meeting_formular = param.meeting_formular
			? {
					end_date: param.meeting_formular.end_date ?? '',
					frequency: param.meeting_formular.frequency ?? 1,
					frequencyLabel: t('每周'),
					repeat_type: param.meeting_formular.repeat_type ?? 1,
					start_date: param.meeting_formular.start_date ?? '',
					week_days: param.meeting_formular.week_days ?? '',
			  }
			: {}
	}
	get meetingResourceVO() {
		return {
			multi: this.max_join_mt ?? '192',
			name: this.max_join_mt ? t('{{num}}方', { num: this.max_join_mt }) : t('192方'),
		}
	}
	/**获取周几 */
	get weekDay() {
		return this.start_time ? WEEKDAY[dayjs(this.start_time).weekday()] : ''
	}
	/**展示例会的*/
	get weekDayLabels() {
		if (this.meeting_formular && this.meeting_formular.week_days) {
			return this.meeting_formular.week_days
				.split(',')
				.map((item) => WEEKDAY[Number(item)])
				.join(',')
		}
		return ''
	}
	/**永久会议 */
	get permanentMeeting() {
		return (this.duration ?? 0) === 0 ? 1 : 0
	}
	get baseMeetingVO() {
		return {
			/**会议日期  年月日 */
			day: this.start_time ? dayjs(this.start_time).format('YYYY-MM-DD') : '', //
			/**会议日期  时分 */
			startTime: this.start_time ? dayjs(this.start_time).format('HH:mm') : '', //会议开始时间}
		}
	}
}
export interface MeetingListPageEntity {
	changeFileInfo: { conf_id: string; file_num: number }
	/*************************************************************************正在召开的会议 */
	/**正在召开的会议列表 */
	beBegin_held_list: MeetingEntity[]
	/**正在召开会议结束 */
	beBegin_held_ajax_finish: boolean
	/**是否展示正在召开的会议 */
	is_show_beBegin_held: boolean
	/**正在召开会议展示标题 */
	beBegin_held_msg: string
	/*************************************************************************预约的会议 */
	/**预约的会议列表*/
	appointment_list: MeetingEntity[]
	/**预约会议请求结束*/
	appointment_ajax_finish: boolean
	/**是否展示预约会议*/
	is_show_appointment: boolean
	/**预约的会议展示标题 */
	appointment_msg: string
	/**接口返回预约会议的总数量*/
	appointment_list_total: number
	/*************************************************************************审批的会议 （当前用户需要被审批的会议以及审批不通过的会议）*/
	audited_list: MeetingEntity[]
	audited_ajax_finish: boolean
	is_show_audited: boolean
	audited_msg: string
	/**取消召开的会议 */
	cancelMeetingList: MeetingEntity[]
	joinMeetingList: MeetingEntity[] /**参加的会议 */
	/*************************************************************************不参加的会议 （当前用户需要被审批的会议以及审批不通过的会议）*/
	/**不参加的会议列表*/
	not_participate_list: MeetingEntity[]
	/**不参加会议请求结束*/
	not_participate_ajax_finish: boolean
	/**冲突会议 */
	conflict_list: MeetingEntity[]
	/**是否展示冲突会议模态框 */
	is_show_conflict_meeting_modal: boolean
	/**是否展示不参加的会议 */
	is_show_not_participate: boolean
	/**不参加会议的标题字段 */
	not_participate_msg: string
	/**量子会议 */
	QT_MEETING: string
	/**AES加密会议 */
	AES_MEETING: string
	/**国密加密会议 */
	GM_MEETING: string
	/**控制电话弹框显示*/
	isShowTelephoneMembership: boolean
	/**参会方式的弹框显示*/
	isShowParticipanteType: boolean
	/**会议拒绝的原因 */
	isShowRejectMeeting: boolean
	/**当前进行操作的会议*/
	_option_meeting: MeetingEntity | null
	/**个人的参会信息 */
	attending_info: personAttendingInfoEntity | null
	/**会议室的详情信息 */
	rooms_detail_info: null | RoomEntity
}

export interface RoomEntity {
	/**时间消息*/
	date: string
	/**会议室数量*/
	room_num: number
	/**区域数量*/
	region_num: number
	/**展现具体的信息*/
	_show_arr: Array<{ /**区域名称*/ region: string; /**会议室名称*/ room: string }>
}

export const initialState: MeetingListPageEntity = {
	changeFileInfo: { conf_id: '', file_num: 0 },
	beBegin_held_list: [],
	beBegin_held_ajax_finish: false,
	is_show_beBegin_held: false,
	beBegin_held_msg: t('正在召开的会议'),
	appointment_list: [],
	appointment_ajax_finish: false,
	is_show_appointment: false,
	appointment_msg: t('预约的会议'),
	appointment_list_total: 0,
	audited_list: [],
	audited_ajax_finish: false,
	is_show_audited: false,
	audited_msg: t('审批的会议'),
	cancelMeetingList: [],
	joinMeetingList: [],
	conflict_list: [],
	is_show_conflict_meeting_modal: false,
	not_participate_list: [],
	not_participate_ajax_finish: false,
	is_show_not_participate: false,
	not_participate_msg: t('不参加会议'),
	QT_MEETING: 'qtmeeting', //量子会议
	AES_MEETING: 'aesmeeting', //AES加密会议
	GM_MEETING: 'gmeeting', //国密加密会议
	/**电话入会模态框显示 */
	isShowTelephoneMembership: false,
	isShowParticipanteType: false,
	isShowRejectMeeting: false,
	_option_meeting: null,
	attending_info: null,
	rooms_detail_info: null,
}
